"""
@name : 高阶函数作业
@author : FengZT_19
@projectname: Scxuexi
"""

# 找出列表中全为数字的字符串，并将其转化为整数输出 -- 1139 -- 使用reduce
from functools import reduce
lst = ['a', '1', '2bb', '13', '', 'None', '9']
def func1(x, y):
    if str(x).isdigit() and y.isdigit():
        return int(str(x) + str(y))
    elif str(x).isdigit():
        return x
    elif y.isdigit():
        return int(y)
print(reduce(func1, lst))

# 有以下列表：list1=[7, -8, 5, 4, 0, -2, -5]
# • 正数在前负数在后
# • 正数从小到大
# • 负数从大到小
# 4，5，7，0，-2，-5，-8
list1=[7, -8, 5, 4, 0, -2, -5]
# def Sort(lst):
#     more = []
#     less = []
#     for num in lst:
#         more.append(num) if num > 0 else less.append(num)
#     return sorted(more) + sorted(less, reverse=True)
# print(Sort(list1))
print(sorted(list1, key=lambda x: (x * -1 + 10) if x <= 0 else x))

# 这是一个字符串排序，排序规则：小写<大写<奇数<偶数
# • s = 'asdf234GDSdsf23' #排序:小写-大写-奇数-偶数
# • 原理：先比较元组的第一个值，FALSE
s = 'asdf234GDSdsf23'

def SORT(str1):
    for i in str1:
        if i.isdigit():
            if int(i) % 2 == 0:
                return (True, True, i)
            else:
                return (True, False, i)
        else:
            if i.isupper():
                return (False, True, i)
            else:
                return (False, False, i)

print(sorted(s, key=SORT))
